<?php
/***
 * パスワード再設定業務
 */
require_once APPLICATION_PATH . '/models/Names/Names.php';
require_once APPLICATION_PATH . '/models/jp.php';
require_once APPLICATION_PATH . '/models/SiteRegistBinder.php';
require_once APPLICATION_PATH . '/models/StaffPasswordChangeTicket.php';
require_once '/Request/Request.php';
require_once 'Mail/send_function.php';
require_once dirname(__FILE__) . '/SiteController.php';
/**
 * パスワード再設定業務コントローラ
 */
class ForgotpasswordController extends Zend_Controller_Action
{
	const パスワード初期化入力URL = 'Forgotpassword/inputpassword?UID=%s';
	/**
	 * 共通初期化
	 */
	public function init()
	{
		$this->view->disp = array();
		$this->var = array();
	}
	/**
	 * メールアドレス入力画面
	 */
	public function inputmailaddressAction()
	{
		$this->view->disp[jp::メールアドレス]
			= $this->_getParam(jp::メールアドレス);
		$this->view->disp[jp::送信ボタン.jp::遷移先]
			= '/forgotpassword/confirmmailsend';
		$this->view->disp[jp::中止ボタン.jp::遷移先]
			= $this->_getParam('REFERER','');
	}
	/**
	 * パスワード再設定メール送信確認画面
	 */
	public function confirmmailsendAction()
	{
		/* メールアドレスとスタッフログインURLをＨＴＴＰリクエストより取得する。(エラーリダイレクトあり）*/
		$this->_confirmmailsendActionGetParam();
		/* クエリー実施 */
		$this->_confirmmailsendActionQuery(
			$this->var[jp::メールアドレス], $this->var[jp::スタッフログインURL]
		);
	}
	/**
	 * パスワード再設定パスワード入力画面
	 * @link http://minder.minibird.jp/life/contents/passwordformAction.html
	 */
	public function inputpasswordAction()
	{
		$this->_パスワード入力画面用UIDリクエストチェック();
		$this->_パスワード設定画面用クエリー発行($this->_getParam(jp::ユニークID,''));
		$this->view->パスワード更新アクション = env::ドキュメントルートベース . '/Forgotpassword/update';
	}
	/**
	 * パスワード再設定更新完了画面
	 */
	public function updateAction()
	{
		$this->_パスワード再設定更新完了画面用リクエストチェック();
		$this->_パスワード再設定更新完了画面用クエリー実行();
		$this->view->ログイン画面URL = '/Staff/login?uid=' . $this->_getParam(jp::ユニークID);
	}
	protected function _パスワード再設定更新完了画面用リクエストチェック()
	{
		if ($this->_getParam(jp::ユニークID,'') == ''){
			$this->_redirect(env::ドキュメントルートベース.'/Staff/login');
			exit();
			return;
		}
		if ($this->_getParam(jp::パスワード,'') == '') {
			$this->_redirect(env::ドキュメントルートベース.'/Staff/login');
			exit();
			return;
		}
	}
	protected function _パスワード再設定更新完了画面用クエリー実行()
	{
		$binder = new Models_SiteRegistBinder(TRUE);
		if ($binder->uid検索($this->_getParam(jp::ユニークID)) == 0) {
			$this->_redirect(env::ドキュメントルートベース.'/Staff/login');
			exit();
			return;
		}
		$binder->パスワード登録($this->_getParam(jp::パスワード));
	}
	/**
	 * ユニークIDがスタッフログインパスワード変更チケット発行ずみのIDでなければ、スタッフログイン画面にリダイレクトする。
	 * ユニークIDに紐づくサイト利用登録用紙をサイト利用登録バインダーから抜き出す。
	 * ユニークIDが未登録である場合、スタッフログイン画面にりだいれくとする。
	 */
	protected function _パスワード設定画面用クエリー発行($uid)
	{
		/* パスワード変更チケット取得*/
		$ticket = new Models_StaffPasswordChangeTicket($uid);
		/* チケットが発行されていない場合は、スタッフログイン画面にリダイレクトする*/
		if (!$ticket->exists()){
			$this->_redirect('/Staff/login');
			exit();
			return;
		}
		/* サイト利用登録バインダーからメールアドレスが一致する登録用紙を取り出す。*/
		$binder = new Models_SiteRegistBinder();
		/* ユニークＩＤがサイト利用未登録の場合、スタッフログイン画面にリダイレクトする */
		if ($binder->uid検索($uid)==0) {
			$this->_redirect('/Staff/login');
			exit();
			return;
		}
		$this->view->disp[jp::チーム名] = $binder->getValue(jp::チーム名);
	}

	/**
	 * パスワード再設定パスワード入力画面用
	 * UIDリクエストチェック
	 */
	protected function _パスワード入力画面用UIDリクエストチェック()
	{
		$pl[jp::ユニークID] = $this->_getParam(jp::ユニークID,'');
		/*** UIDが未設定の場合、スタッフログイン画面にリダイレクトする */
		if ($pl[jp::ユニークID] == '') {
			$this->_redirect('/Staff/login');
			exit();
			return;
		}
		/* サイト利用登録バインダーからメールアドレスが一致する登録用紙を取り出す。*/
		$pl[jp::バインダー] = new Models_SiteRegistBinder();
		$pl[jp::ページ数] = $pl[jp::バインダー]->uid検索($pl[jp::ユニークID]);
		/* UIDが登録されていない場合、スタッフログイン画面にリダイレクトする */
		if ($pl[jp::ページ数] == 0) {
			$this->_redirect('/Staff/login');
			exit();
			return;
		}
		$pl[jp::バインダー] instanceof Models_SiteRegistBinder;
		$this->view->disp[jp::チーム名] = $pl[jp::バインダー]->getValue(jp::チーム名);
	}
	/**
	 * パスワード再設定メール送信確認画面用メソッドパラメータ取得
	 * メールアドレスとスタッフログインURLをＨＴＴＰリクエストより取得する。
	 * メールアドレスが取得できない場合は、ログインページにリダイレクトする
	 */
	protected function _confirmmailsendActionGetParam()
	{
		$this->var[jp::スタッフログインURL] = $this->_getParam(jp::スタッフログインURL,'/Staff/login');
		$this->var[jp::メールアドレス] = $this->_getParam(jp::メールアドレス, '');
		/*** メールアドレスを取得できない場合はログインページにリダイレクトする */
		if ($this->var[jp::メールアドレス] == '') {
			$this->_redirect($this->var[jp::スタッフログインURL]);
			exit();
			return;
		}
	}
/**
 * パスワード再設定メール送信確認画面用メソッドクエリー発行
 * @param $mailAddress メールアドレス
 * @param $redirectTo 緊急リダイレクト先URL
 */
	protected function _confirmmailsendActionQuery($mailAddress, $redirectTo)
	{
		/* サイト利用登録バインダーからメールアドレスが一致する登録用紙を取り出す。*/
		$binder = new Models_SiteRegistBinder();
		$this->var[jp::登録用紙の束] = $binder->selectAgreeMailAddressPaper($mailAddress);
		/* 該当する登録用紙が見つからない場合は、スタッフログイン画面へリダイレクトする。*/
		if ($this->var[jp::登録用紙の束] == 0) {
			$this->_redirect($redirectTo);
			exit();
			return;
		}
		/* スタッフログインパスワード変更チケット発行*/
		$ticket = new Models_StaffPasswordChangeTicket($binder->getValue(jp::ユニークID));
		/* スタッフログインパスワード変更チケットの発行に失敗したら
		 * 「しばらくおまちください」画面へリダイレクトする。 */
		if ($ticket->put() === FALSE) {
			$this->_redirect('/Later');
			exit();
			return;
		}
		/* スタッフログインパスワード初期化完了メール送信 */
		$subject = 'スタッフログインパスワード変更準備完了のお知らせ。';
		$url = APPLICATION_WEB_PATH . sprintf(self::パスワード初期化入力URL,$binder->getValue(jp::ユニークID));
		$mailBody = sprintf(FORGOTPASSWORD_CONTROLLER_MAIL_BODY01,$binder->getValue(jp::チーム名),$url);
		/* メール送信に失敗した場合「あとでね」画面へリダイレクトする*/
		if (Mail_send_function($mailAddress, $subject, $mailBody, 'jsc@minder.minibird.jp') != 0){
			$this->_redirect('/Later');
			exit();
			return;
		}
	}
}
/* スタッフログインパスワード初期化準備完了メール本文 */
define('FORGOTPASSWORD_CONTROLLER_MAIL_BODY01',
<<<EOD
%s様
パスワード初期設定の準備が整いました。
以下の、URLからパスワードの再設定を実施してください。
%s
EOD
);
/*******************************************************
 *                                    単体テストブロック
 ******************************************************/
if (class_exists('SimpleActionControllerTester')) {
	class 我が輩{
		const の = 'DAEMON';
		public function 年齢を教えてやろう(){
			return '10万27歳だ';
		}
	}
	define('APPLICATION_WEB_PATH' , 'http://localhost:9080/');
	/**
	 * ユニットテストコ	ントローラ
	 */
	class ForgotpasswordConrollerTest extends SimpleActionControllerTester
	{
		const 実在ユニークID = '54180dde2649e3.86177160';
		/*
		 *パスワード設定画面用クエリー発行メソッドテスト０１
		 *ユニークIDがスタッフログインパスワード変更チケット発行ずみのIDでなければ、
		 *スタッフログイン画面にリダイレクトする。
		 */
		public function test_パスワード設定画面用クエリー発行メソッドテスト０１()
		{
			$this->_switchClassMethod(
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケットクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行メソッド名,
					Relief_ForgotpasswordController::外部メソッドすり替えクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行替え玉メソッド名：フォルス返し
			);
			GLOBAL $redirectUrl;
			$redirectUrl = '';
			storeExit();
			/* クエリー発行メソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_パスワード設定画面用クエリー発行',
					'53780c9b851208.74580417');
			restoreExit();
			$this->assertEqual($redirectUrl, '/Staff/login');
		}
		/**
		 * パスワード設定画面用クエリー発行メソッドテスト０２
		 * ユニークIDがサイト利用未登録である場合、スタッフログイン画面にりだいれくとする。
		 */
		public function test_パスワード設定画面用クエリー発行メソッドテスト０２()
		{
			$this->_switchClassMethod(
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケットクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行メソッド名,
					Relief_ForgotpasswordController::外部メソッドすり替えクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行替え玉メソッド名：トゥルー返し
			);
			GLOBAL $redirectUrl;
			$redirectUrl = '';
			storeExit();
			/* クエリー発行メソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_パスワード設定画面用クエリー発行',
					'zzz');
			restoreExit();
			$this->assertEqual($redirectUrl, '/Staff/login');
		}
		/**
		 * パスワード設定画面用クエリー発行メソッドテスト０3
		 * ユニークＩＤがパスワード再設定チケット発行済みで、
		 * サイト利用登録済みである場合、
		 * 画面にチーム名が表示されること
		 */
		public function test_パスワード設定画面用クエリー発行メソッドテスト０3()
		{
			$this->_switchClassMethod(
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケットクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行確認メソッド名,
					Relief_ForgotpasswordController::外部メソッドすり替えクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行替え玉メソッド名：トゥルー返し
			);
			/* クエリー発行メソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_パスワード設定画面用クエリー発行',
					'53780c9b851208.74580417');
			$this->assertEqual($this->controller->view->disp[jp::チーム名], 'FC葛西');
		}
		/**
		 * メールアドレス入力画面テスト001
		 * 送信ボタンのリンク先が
		 * '/forgotpassword/confirmmailsend'
		 * であること
		 */
		public function test_inputmailaddressAction_001()
		{
			$this->controller->inputmailaddressAction();
			$this->assertEqual(
					$this->controller
					->view->disp[jp::送信ボタン.jp::遷移先],
					'/forgotpassword/confirmmailsend');
		}
		/**
		 * メールアドレス入力画面テスト002
		 * メールアドレスパラメータの値がメール入力に設定されること
		 */
		public function test_inputmailaddressAction002()
		{
			$_POST[jp::メールアドレス] = 'abc@co.jp';
			$this->controller->inputmailaddressAction();
			$this->assertEqual($this->controller->view->disp[jp::メールアドレス], 'abc@co.jp');
		}
		/**
		 * パスワード再設定メール送信確認画面用メソッド
		 * リクエストパラメータ取得テスト
		 * 	メールアドレスが未設定の場合、ログイン画面に遷移する
		 */
		public function test__getMailAddress_001()
		{
			$_POST[jp::メールアドレス] = '';
			$_GET[jp::メールアドレス] = '';
			$methodA = new ReflectionMethod($this->controller, '_confirmmailsendActionGetParam');
			$methodA->setAccessible(true);
			storeExit();
			$methodA->invoke($this->controller);
			restoreExit();
			GLOBAL $redirectUrl;
			$this->assertEqual($redirectUrl, '/Staff/login');
		}
		/**
		 * パスワード再設定メール送信確認画面ようメソッド
		 * クエリー実行テスト０１
		 * パラメータから取得したメールアドレスがサイト登録されていない場合
		 * スタッフログイン画面にリダイレクトする。
		 */
		public function test__confirmmailsendActionQuery01()
		{
			storeExit();
			$this->_invokeReflectionedMethod('_confirmmailsendActionQuery', 'hariushi@gmail.com2', '/Staff/login');
			restoreExit();
			GLOBAL $redirectUrl;
			$this->assertEqual($redirectUrl, '/Staff/login');
		}
		/**
		 * パスワード再設定メール送信確認画面ようメソッド
		 * クエリー実行テスト０２
		 * スタッフログインパスワード変更チケットの発行が失敗した場合は、
		 * 「時間をおいてのご利用」画面へリダイレクトする。
		 */
		public function test__confirmmailsendActionQuery02()
		{
			$this->_switchClassMethod(
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケットクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行メソッド名,
					Relief_ForgotpasswordController::外部メソッドすり替えクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行替え玉メソッド名：フォルス返し
			);
			storeExit();
			/* クエリーメソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_confirmmailsendActionQuery',
					'hariushi@minder.minibird.jp',
					'/Staff/login');
			restoreExit();
			GLOBAL $redirectUrl;
			$this->assertEqual($redirectUrl, '/Later');
		}
		/**
		 * パスワード再設定メール送信確認画面ようメソッド
		 * クエリー実行テスト０３
		 * メール送信に失敗した場合「あとでね」画面にリダイレクトする
		 */
		public function test__confirmmailsendActionQuery03()
		{
			/* メール送信関数を強制FALSE返しに書き換える */
			runkit_function_remove('Mail_send_function');
			runkit_function_copy('Mail_send_function_False' , 'Mail_send_function');
			/* パスワード変更チケット発行関数を強制TRUE返しに書き換える */
			$this->_switchClassMethod(
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケットクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行メソッド名,
					Relief_ForgotpasswordController::外部メソッドすり替えクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行替え玉メソッド名：トゥルー返し
			);
			/* クエリーメソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_confirmmailsendActionQuery',
					'hariushi@minder.minibird.jp',
					'/Staff/login');
			GLOBAL $redirectUrl;
			$this->assertEqual($redirectUrl, '/Later');
		}
		/**
		 * パスワード再設定メール送信確認画面ようメソッド
		 * クエリー実行テスト０４
		 * メール送信する
		 */
		public function test__confirmmailsendActionQuery04()
		{
			/* メール送信関数を強制TRUE返しに書き換える */
			runkit_function_remove('Mail_send_function');
			runkit_function_copy('Mail_send_function_True' , 'Mail_send_function');
			/* パスワード変更チケット発行関数を強制TRUE返しに書き換える */
			$this->_switchClassMethod(
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケットクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行メソッド名,
					Relief_ForgotpasswordController::外部メソッドすり替えクラス名,
					Relief_ForgotpasswordController::スタッフログインパスワード変更チケット発行替え玉メソッド名：トゥルー返し
			);
			storeExit();
			/* クエリーメソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_confirmmailsendActionQuery',
					'hariushi@minder.minibird.jp',
					'/Staff/login');
			restoreExit();
			GLOBAL $mailApiUrl;
			echo urldecode($mailApiUrl) . "\n";
		}
		public function test_メール送信組み合わせテスト()
		{
			$ret = "";
			storeExit();
			/* クエリーメソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_confirmmailsendActionQuery',
					'hariushi@gmail.com',
					'/Staff/login');
			restoreExit();
		}
		/**
		 * パスワード入力画面UIDチェックテスト０１
		 * リクエストにUIDが設定されていない場合、スタッフログイン画面に遷移する
		 */
		public function test_UIDリクエストチェック０１()
		{
			$日本語 ='good';
			$_GET[jp::ユニークID] = '';
			$_POST[jp::ユニークID] = '';
			GLOBAL $redirectUrl;
			$redirectUrl = '';
			storeExit();
			/* ＵＩＤチェックメソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_パスワード入力画面用UIDリクエストチェック');
			restoreExit();
			$this->assertEqual($redirectUrl, '/Staff/login');
		}
		/**
		 * 日本語変数名テスト
		 */
		public function test_日本語変数名テスト()
		{
			$あ = 'a';
			$い = 'i';
			$う ='u';
			return;

		}
		/**
		 * パスワード入力画面UIDチェックテスト０２
		 * UIDが未登録の場合、スタッフログイン画面に遷移する
		 */
		public function test_UIDリクエストチェック０２()
		{
			GLOBAL $redirectUrl;
			$redirectUrl = '';
			$_GET[jp::ユニークID] = 'aabbcc';
			storeExit();
			/* ＵＩＤチェックメソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_パスワード入力画面用UIDリクエストチェック');
			restoreExit();
			$this->assertEqual($redirectUrl, '/Staff/login');
		}
		/**
		 * パスワード入力画面ＵＩＤチェックテスト０３
		 * ＵＩＤが登録済みの場合、画面にチーム名が設定される
		 */
		public function test_UIDリクエストチェック０３()
		{
			$_GET[jp::ユニークID] = '53780c9b851208.74580417';
			/* ＵＩＤチェックメソッド（PROTECTED）実行 */
			$this->_invokeReflectionedMethod(
					'_パスワード入力画面用UIDリクエストチェック');
			$check = $this->controller->view->disp[jp::チーム名];
			$this->assertEqual($check, 'FC葛西');
		}
		/**
		 * パスワード確定画面用パラメータチェック０１
		 * ＵＩＤが未設定の場合、スタッフログイン画面にリダイレクトする
		 */
		public function test_パスワード確定画面用パラメータチェック０１（ＵＩＤ未設定）()
		{
			GLOBAL $redirectUrl;
			unset($_POST[jp::ユニークID]);
			unset($_GET[jp::ユニークID]);
			storeExit();
			$this->_invokeReflectionedMethod('_パスワード再設定更新完了画面用リクエストチェック');
			restoreExit();
			$this->assertEqual($redirectUrl, env::ドキュメントルートベース.'/Staff/login');
		}
		/**
		 * パスワード確定画面用パラメータチェック０２
		 * パスワードが未設定の場合、スタッフログイン画面にリダイレクトする
		 */
		public function test_パスワード確定画面用パラメータチェック０２（パスワード）()
		{
			GLOBAL $redirectUrl;
			$redirectUrl = '';
			unset($_REQUEST[jp::パスワード]);
			unset($_REQUEST[jp::パスワード]);
			storeExit();
			$this->_invokeReflectionedMethod('_パスワード再設定更新完了画面用リクエストチェック');
			restoreExit();
			$this->assertEqual($redirectUrl, env::ドキュメントルートベース.'/Staff/login');
		}
		/**
		 * パスワード確定画面用パラメータチェック０３
		 * UIDとパスワーおが設定されている場合、リダイレクトしないこと
		 */
		public function test_パスワード確定画面用パラメータチェック０３（パスワード）()
		{
			GLOBAL $redirectUrl;
			$redirectUrl = '';
			$_REQUEST[jp::パスワード] = 'abc';
			$_REQUEST[jp::パスワード] = 'abc';
			storeExit();
			$this->_invokeReflectionedMethod('_パスワード再設定更新完了画面用リクエストチェック');
			restoreExit();
			$this->assertEqual($redirectUrl, env::ドキュメントルートベース.'/Staff/login');
		}
		/**
		 * パスワード確定画面用クエリー発行チェック０１
		 * リクエストＵＩＤがサイト利用未登録の場合、スタッフログイン画面にリダイレクトする
		 */
		public function test_パスワード確定画面用クエリー発行チェック０１（ＵＩＤ相関）()
		{
			GLOBAL $redirectUrl;
			storeExit();
			$this->controller->updateAction();
			restoreExit();
			$this->assertEqual($redirectUrl, env::ドキュメントルートベース.'/Staff/login');
		}
		/**
		 * パスワード確定画面用クエリー発行正常更新ケース０１
		 */
		public function test_パスワード確定画面用クエリー発行正常更新ケース０１()
		{
			$_GET[jp::ユニークID] = self::実在ユニークID;
			$_POST[jp::パスワード] = 'ccccc';
			$this->controller->updateAction();
			$binder = new Models_SiteRegistBinder();
			$binder->uid検索(self::実在ユニークID);
			$ret = $binder->isYou('_loginPassword', 'ccccc', Models_SiteRegistBinder::SELECT_AGREE);
			$this->assertEqual($ret, TRUE);
		}
		//*******************************************************
		//*******************************************************
		public function test_ZendViewFormSelect()
		{
			$view = new Zend_View();
			$obj = new Zend_View_Helper_FormSelect();
			$obj->setView($view);
			$ret = $obj->formSelect('select1', 'aa',null,array('bb','aa'));
			echo $ret . "\n";
			$v= new 我が輩();
			$v instanceof  我が輩;
			echo $v->年齢を教えてやろう();
			$var[我が輩::の] = new 我が輩();
			echo $var[我が輩::の]->年齢を教えてやろう();
		}
		/**
		 * 被検アクションコントローラインスタンス作成
		 * (non-PHPdoc)
		 * @see SimpleActionControllerTester::setUp()
		 */
		public function setUp()
		{
			parent::setUp();
			$this->controller = new ForgotpasswordMocActionController($this->_objRequest, $this->_objResponse,array());
			$this->controller->init();
		}
	}
	/**
	 * 外部クラスメソッドすり替え定義
	 */
	class Relief_ForgotpasswordController
	{
		/*
		 * 日本語論理名定数
		*/
		const 外部メソッドすり替えクラス名 = 'Relief_ForgotpasswordController';
		const フォルスを返すだけのメソッド名 = 'ReturnFalse';
		const スタッフログインパスワード変更チケットクラス名='Models_StaffPasswordChangeTicket';
		const スタッフログインパスワード変更チケット発行メソッド名='put';
		const スタッフログインパスワード変更チケット発行確認メソッド名='exists';

		const スタッフログインパスワード変更チケット発行替え玉メソッド名：フォルス返し='Models_StaffPasswordChangeTicket_put01';
		public function Models_StaffPasswordChangeTicket_put01()
		{
			return FALSE;
		}
		const スタッフログインパスワード変更チケット発行替え玉メソッド名：トゥルー返し='Models_StaffPasswordChangeTicket_put02';
		public function Models_StaffPasswordChangeTicket_put02()
		{
			return TRUE;
		}
	}
	/**
	 * メール送信メソッドを実際には送信しないように書き換える
	 */
	$mailApiUrl = '';
	/* 替え玉メソッド */
	function Mail_send_function_True($to,$subject,$text,$from)
	{
		$url = 'http://minder.minibird.jp/hlib/Mail/send.php?to=hariushi@gmail.com';
		$subject =urlencode($subject);
		$text = urlencode($text);
		$url .= '&subject=' . $subject . '&text=' . $text . '&from=' . $from;
		GLOBAL $mailApiUrl;
		$mailApiUrl = $url;
		return TRUE;
	}
	function Mail_send_function_False($to,$subject,$text,$from)
	{
		return FALSE;
	}
	/*********************************************************/
	/*** テスト対象コントローラに全プロパティ参照可能メソッドを追加する */
	runkit_method_copy(pathinfo(__FILE__)['filename'], 'getValue', 'ActionControllerTestController');
	/**
	 * テスト用にメソッドをオーバーライドしたモックアクションコントローラ
	 */
	class ForgotpasswordMocActionController extends ForgotpasswordController
	{
		/**
		 * ZendViewをパブリックアクセスできるようにする
		 * (non-PHPdoc)
		 * @see IndexController::init()
		 */
		public function init()
		{
			/*** CLI起動はviewのインスタンスがない */
			if (!isset($this->view)) {
				$this->view = new stdClass();
			}
			parent::init();
		}
		/**
		 * リダイレクトをリダイレクト先検証用に書き換える
		 * (non-PHPdoc)
		 * @see Zend_Controller_Action::_redirect()
		 */
		public function _redirect($url) {
			GLOBAL $redirectUrl;
			$redirectUrl = $url;
		}
	}
	runkit_function_remove('header');
	function header($string)
	{
		GLOBAL $redirectUrl;
		$redirectUrl = $string;
	}
	/** exitを無効化する*/
	function storeExit(){uopz_overload(ZEND_EXIT, function(){});}
	/** 無効化したexitを元に戻す*/
	function restoreExit()	{uopz_overload(ZEND_EXIT, null);}
}
